package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-gin-admin/model"
	"github.com/go-gin-admin/util"
	"net/http"
	"time"
)

// 增加菜单
func AddMenu(c *gin.Context) {
	var menuData model.Menu
	// 解析参数
	if err := c.BindWith(&menuData, binding.JSON); err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("参数解析错误"))
		return
	}
	local := time.Now().Local()
	menuData.UpdateTime = local
	menuData.CreateTime = local
	insertId, err := menuData.AddMenu()
	if err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("创建错误"))
		return
	}
	m := make(map[string]interface{})
	m["insertId"] = insertId
	c.JSON(http.StatusOK, new(util.Response).Ok("创建成功", m))
}

// 删除菜单
func DeleteMenu(c *gin.Context) {
	var menuData model.Menu
	menuId, _ := util.StringToInt64(c.Param("menuId"))
	if err := menuData.DeleteMenu(menuId); err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("删除失败"))
		return
	}
	c.JSON(http.StatusOK, new(util.Response).Ok("删除成功", nil))
}

// 修改菜单
func UpdateMenu(c *gin.Context) {
	var menuData model.Menu
	// 解析参数
	if err := c.BindWith(&menuData, binding.JSON); err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("参数解析错误"))
		return
	}
	menuData.UpdateTime = time.Now().Local()
	if err := menuData.UpdateMenu(); err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("编辑失败"))
		return
	}
	c.JSON(http.StatusOK, new(util.Response).Ok("编辑成功", nil))
}

// 查询菜单tree
func GetMenuTree(c *gin.Context) {
	var menuData model.Menu
	menuTree, err := menuData.GetMenuTree()
	if err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("查询错误"))
		return
	}
	m := make(map[string]interface{})
	m["deptTree"] = menuTree
	c.JSON(http.StatusOK, new(util.Response).Ok("", m))
}

// 根据role_key获取当前角色有拥有的菜单
func GetMenuTreeByRoleKey(c *gin.Context) {
	// 获取当前请求用户信息
	user, _ := c.Get("token")
	myClaims := user.(util.MyClaims)
	// 通过roleKeys获取所拥有的菜单
	menuTree, err := model.GetMenuTreeByRole(myClaims.RoleKeys)
	if err != nil {
		c.JSON(http.StatusOK, new(util.Response).Err("查询错误"))
		return
	}
	m := make(map[string]interface{})
	m["menuTree"] = menuTree
	c.JSON(http.StatusOK, new(util.Response).Ok("", m))

}


